/* 
 * File:   FileServiceTest.cpp
 * Author: nahuel
 *
 * Created on Jun 1, 2013, 7:25:49 PM
 */

#include <stdlib.h>
#include <iostream>
#include "server_FileService.h"
#include "common_ProtocoloConstantes.h"
#include "common_Codec.h"

/*
 * Simple C++ Test Suite
 */


// DEFINIR UN PATH VALIDO
#define     PATH_AU     "/home/nahuel/AU"


class MensajeroDummy : public IMensajero {
    void Responder (const string& pMensaje) throw (Excepcion&) {
        std::cout << pMensaje << std::endl;
    }
};

void testMensajeEntranteManejadorDeclareFile() {
    IMensajero* pMensajero = new MensajeroDummy();
    
    // <token>|<FILE_SERVICE_SERVICE>|<DECLARE_FILE>|<file_name>
    std::string pMensaje = "token";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "FILE_SERVICE";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "DECLARE_FILE";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "newFile.txt";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += MARCA_FIN_MENSAJE;
    
    
    TP::Servicios::FileService fileService(string(PATH_AU));
    fileService.mensajeEntranteManejador(pMensajero, pMensaje);
    
    if (false /* ver resultados en el directorio */) {
        std::cout << "%TEST_FAILED% time=0 testname=testMensajeEntranteManejador (FileServiceTest) message=error message sample" << std::endl;
    }
    
    delete pMensajero;
}

void testMensajeEntranteManejadorPutChunk() {    
    IMensajero* pMensajero = new MensajeroDummy();
    TP::Servicios::FileService fileService(string(PATH_AU));
    TP::Codec codec;
    
    // <token>|<FILE_SERVICE>|<PUT_CHUNK>|<file_name>|<nro_chunk>|<chunk>
    std::string pMensaje = "token";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "FILE_SERVICE";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "PUT_CHUNK";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "newFile.txt";    
    pMensaje += SEPARADOR_CAMPO;    
    pMensaje += "41414141414141414141";           // "AAAAAAAAAA"    
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += MARCA_FIN_MENSAJE;
    
    
    fileService.mensajeEntranteManejador(pMensajero, pMensaje);
    
    pMensaje = "token";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "FILE_SERVICE";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "PUT_CHUNK";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "newFile.txt";    
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "42424242424242424242";               // "BBBBBBBBBB"
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += MARCA_FIN_MENSAJE;
    
    fileService.mensajeEntranteManejador(pMensajero, pMensaje);
    
    pMensaje = "token";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "FILE_SERVICE";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "PUT_CHUNK";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "newFile.txt";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "434343";                            // "CCC"
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += MARCA_FIN_MENSAJE;
    
    fileService.mensajeEntranteManejador(pMensajero, pMensaje);
    
    if (false /*check result*/) {
        std::cout << "%TEST_FAILED% time=0 testname=testMensajeEntranteManejador (FileServiceTest) message=error message sample" << std::endl;
    }
}

void testMensajeEntranteManejadorDefineFile() {
    IMensajero* pMensajero = new MensajeroDummy();
    TP::Servicios::FileService fileService(string(PATH_AU));
    
    std::string pMensaje = "token";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "FILE_SERVICE";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "DEFINE_FILE";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += "newFile.txt";
    pMensaje += SEPARADOR_CAMPO;
    pMensaje += MARCA_FIN_MENSAJE;
    
    fileService.mensajeEntranteManejador(pMensajero, pMensaje);
    
    if (false /*check result*/) {
        std::cout << "%TEST_FAILED% time=0 testname=testMensajeEntranteManejador (FileServiceTest) message=error message sample" << std::endl;
    }
}

int main(int argc, char** argv) {
    std::cout << "%SUITE_STARTING% FileServiceTest" << std::endl;
    std::cout << "%SUITE_STARTED%" << std::endl;

    std::cout << "%TEST_STARTED% testMensajeEntranteManejadorDeclareFile (FileServiceTest)" << std::endl;
    testMensajeEntranteManejadorDeclareFile();
    std::cout << "%TEST_FINISHED% time=0 testMensajeEntranteManejadorDeclareFile (FileServiceTest)" << std::endl;
    
    std::cout << "%TEST_STARTED% testMensajeEntranteManejadorPutChunk (FileServiceTest)" << std::endl;
    testMensajeEntranteManejadorPutChunk();
    std::cout << "%TEST_FINISHED% time=0 testMensajeEntranteManejadorPutChunk (FileServiceTest)" << std::endl;
    
    std::cout << "%TEST_STARTED% testMensajeEntranteManejadorDefineFile (FileServiceTest)" << std::endl;
    testMensajeEntranteManejadorDefineFile();
    std::cout << "%TEST_FINISHED% time=0 testMensajeEntranteManejadorDefineFile (FileServiceTest)" << std::endl;

    std::cout << "%SUITE_FINISHED% time=0" << std::endl;

    return (EXIT_SUCCESS);
}

